#include<bits/stdc++.h>
#define int long long
#define For(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define Rof(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define rep(i  ,b) for(int i=1,i##end=b;i<=i##end;i++)
using namespace std;
const int N=4e5+9;
const int p=998244353;
int read(){
	int f=0,x=0;
	char ch=getchar();
	while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
	return f?-x:x;
}
int n,k;
vector<int>e[N];
namespace brute{
	int ok[N];
	int dp[110][410];
	int sz[N];
	void dfs(int x,int fa){
		sz[x]=1;
		for(int to:e[x])if(ok[to]&&to!=fa)
			dfs(to,x),sz[x]+=sz[to];
	}
	void update(int x,int y){
		For(i,0,k-1)(dp[y][i+1]+=dp[x][i])%=p;
	}
	void solve(){
		dp[0][0]=1;
		rep(i,n){
			rep(j,n)ok[j]=0;
			Rof(j,i,1){
				ok[j]=1;dfs(i,0);
				if(sz[i]==i-j+1)update(j-1,i);
			}
		}
		rep(i,k)printf("%lld\n",dp[n][i]);
		exit(0);
	}
}
namespace line{
	int fac[N],ifac[N];
	int inv(int x,int base=p-2){
		int res=1;
		while(base){
			if(base&1)res=res*x%p;
			x=x*x%p;
			base>>=1;
		}return res;
	}
	void init(int n=N-1){
		fac[0]=1;rep(i,n)fac[i]=fac[i-1]*i%p;
		ifac[n]=inv(fac[n]);Rof(i,n-1,0)ifac[i]=ifac[i+1]*(i+1)%p;
		assert(fac[10]*ifac[10]%p==1);
	}
	int C(int n,int m){return (n>=m&&m>=0)?fac[n]*ifac[m]%p*ifac[n-m]%p:0;}
	void solve(){
		init();
		rep(i,k)printf("%lld\n",C(n-1,i-1));
		exit(0);
	}
}
signed main(){
//	system("fc soft3.out soft.out");return 0;
	freopen("soft.in","r",stdin);
	freopen("soft.out","w",stdout);
	n=read(),k=read();
	rep(i,n-1){
		int x=read(),y=read();
		e[x].push_back(y);
		e[y].push_back(x);
	}
	if(n<=100)brute::solve();
	line::solve();
	return 0;
}

